#ifndef __IS_CORE_RAYTRACE_RAYTRACEENGINE__
#define __IS_CORE_RAYTRACE_RAYTRACEENGINE__

namespace IS
{

class IRayCastEngine;
class Light;

class MCD_ABSTRACT_CLASS IRayTraceEngine
{
public:
	class Sample : public LinkListBase::Node<Sample>
	{
	public:
		Vec3f position;
		Vec3f normal;
		Vec3f illumination;
		Vec3f reserved[4];
	};

public:
    virtual ~IRayTraceEngine() {}
    
    virtual void beginAddLight() = 0;
    
    virtual void addLight(Light* light) = 0;
    
    virtual void endAddLight() = 0;
    
    virtual void bake(IRayCastEngine* rcEngine, LinkList<Sample>* samplesToBake) = 0;
};

class IS_CORE_API SimpleRayTraceEngine : public IRayTraceEngine
{
public:
	SimpleRayTraceEngine();

	sal_override ~SimpleRayTraceEngine();
    
    sal_override void beginAddLight();
    
    sal_override void addLight(Light* light);
    
    sal_override void endAddLight();
    
    sal_override void bake(IRayCastEngine* rcEngine, LinkList<Sample>* samplesToBake);

private:
	class Impl;
	Impl* mImpl;
};

}

#endif  // #ifndef __IS_CORE_RAYTRACE_RAYTRACEENGINE__
